package com.tqfframe.studydemo.proxy.dubboProxy.util;

import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy;

import java.lang.reflect.Method;

/**
 *
 * Created by Tang-QiFeng on 2022/2/17
 */
public class CglibProxy implements MethodInterceptor {

    //需要代理对象
    private Object target;

    public CglibProxy(Object target) {
        this.target = target;
    }

    /**
     * 创建代理对象
     */
    public Object getProxyInstance() {
        Enhancer enhancer = new Enhancer();
        // 设置父类
        enhancer.setSuperclass(target.getClass());
        // 设置回调函数
        enhancer.setCallback(this);
        // 创建子类（代理对象）
        return enhancer.create();
    }


    /**
     * obj		代理对象
     * method	被代理对象的方法
     * args		被代理对象的参数
     */
    @Override
    public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {
            // 方法执行前后进行一些其他操作
            System.out.println("方法执行前...");
            Object result = method.invoke(target, args);
            //  方法执行前后进行一些其他操作
            System.out.println("方法执行后...");
            return result;
    }

}
